package com.gengzp.ops.service;

import com.gengzp.common.model.nacos.req.AddNacosConfigReq;
import com.gengzp.common.model.nacos.req.EditNacosConfigReq;
import com.gengzp.common.model.nacos.req.EditYamlReq;
import com.gengzp.common.model.nacos.req.PageYamlReq;
import com.gengzp.common.model.nacos.resp.PageServiceInstanceResp;
import com.gengzp.common.model.nacos.resp.PageYamlResp;
import com.gengzp.common.model.nacos.resp.SearchNacosConfigResp;
import com.gengzp.common.model.nacos.resp.SearchYamlResp;
import com.gengzp.common.model.pagination.req.PaginationReq;
import com.gengzp.common.model.pagination.resp.PaginationResult;

import java.util.List;

/**
 * @ClassName INacosService
 * @Description nacos服务治理服务层接口
 * @Author gengzp
 * @Date 2025/5/31 22:02
 */
public interface INacosService {

    /**
     * 添加nacos配置信息
     *
     * @param req 添加nacos配置请求参数
     */
    void addNacosConfig(AddNacosConfigReq req);

    /**
     * 编辑nacos配置信息
     *
     * @param req 编辑nacos配置请求参数
     */
    void editNacosConfig(EditNacosConfigReq req);

    /**
     * 查询nacos配置信息列表
     *
     * @return nacos配置信息列表
     */
    List<SearchNacosConfigResp> searchNacosConfigList();

    /**
     * 根据id查询nacos配置信息详情
     *
     * @param nacosConfigId nacos配置信息id
     * @return nacos配置信息
     */
    SearchNacosConfigResp searchNacosConfigById(Long nacosConfigId);

    /**
     * 根据id删除nacos配置信息
     *
     * @param nacosConfigId nacos配置id
     */
    void deleteNacosConfigById(Long nacosConfigId);

    /**
     * 分页查询yaml配置信息
     *
     * @param req 分页查询yaml请求参数
     * @return 分页查询结果
     */
    PaginationResult<PageYamlResp> pageQueryYamlConfig(PageYamlReq req);

    /**
     * 同步yaml配置到数据库
     */
    void syncYamlToDatabase();

    /**
     * 根据dataId查询yaml配置信息
     *
     * @param dataId 数据id
     * @return yaml配置信息
     */
    SearchYamlResp searchYamlConfigByDataId(String dataId);

    /**
     * 编辑yaml配置信息
     *
     * @param req 编辑yaml配置请求参数
     */
    void editYamlConfig(EditYamlReq req);

    /**
     * 分页查询服务实例
     *
     * @param req 分页查询服务实例请求参数
     * @return 分页查询结果
     */
    PaginationResult<PageServiceInstanceResp> pageQueryServiceInstance(PaginationReq req);

}
